/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.cje.gateway.security.config;

import cn.hutool.core.lang.UUID;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import java.io.Serial;
import java.io.Serializable;
import java.util.Map;

/**
 * 发送HTTP请求的客户端详细信息
 */
@NoArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
@ToString
public class ClientDetails implements Serializable {

    /**
     * 唯一标识可序列化的类
     */
    @Serial
    private static final long serialVersionUID = -1693602165749L;

    /**
     * 来自客户端的HTTP请求线程唯一标识
     */
    private String clientRequestId;
    /**
     * 客户端的登录名
     */
    private String clientLoginName;
    /**
     * 客户端的IP地址
     */
    private String clientIpAddress;
    /**
     * 客户端的用户空间
     */
    private String clientUserProfile;

    /**
     * 客户端在服务器缓存的访问凭证
     * <p>
     * client-unexpired缓存路径的数据：设备IP-用户名-用户空间 --->> Access-Token
     */
    private String clientPresentToken;
    /**
     * 发送HTTP请求的客户端在服务器已登录的用户列表
     * <p>
     * client-profile缓存路径的数据：设备IP --->> Map<用户空间标识, 用户名>
     */
    private Map<String, String> serverUserProfileMap;
    /**
     * 当前用户已登录的设备列表
     * <p>
     * client-credentials缓存路径的数据：用户名 --->> Map<Access-Token, 设备IP>
     */
    private Map<String, String> serverCredentialsMap;

    /**
     * 请求头携带的访问凭证
     */
    private String requestHeaderToken;
    /**
     * 当前会话绑定的用户名
     */
    private String sessionPrincipal;
    /**
     * 当前会话绑定的客户端IP地址
     */
    private String sessionClientIpAddress;
    /**
     * 当前会话绑定的用户空间
     */
    private String sessionUserProfile;

    /**
     * 验证token字符串是否为UUID的格式
     */
    public static boolean validSessionId(String accessToken) {
        try {
            UUID.fromString(accessToken);
            return true;
        } catch (Exception ignored) {
            return false;
        }
    }

}
